class Solution {
public:
    int combinationSum4(vector<int>& nums, int target) {
        // dp[i] 表示：总和为 i 的时候，一共有多少种排列方案
        vector<double> dp(target + 1, 0); // double防溢出
        dp[0] = 1;
        int sz = nums.size();
        for(int i = 1; i <= target; ++i)
        {
            for(int j = 0; j < sz; ++j)
            {
                if(i >= nums[j])
                    dp[i] += dp[i - nums[j]];
            }
        }
        return dp[target];
    }
};